﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using tea.DB;
using tea.BL;
using Util;
using tea.Models;
using System.Net.Mail;
using System.Net;

namespace tea.Controllers
{
    public class GuestController : Controller
    {
        [HttpGet]
        public ActionResult Login()
        {
            return View();
        }

        [Util.AjaxOnly]
        [HttpPost]
        public ActionResult Login(GuestLoginModel 모델, string returnUrl) 
        {
            System.Threading.Thread.Sleep(1000); // 정보: 로그인 로봇 방어 위해
            string 에러메시지;
            if (BL사용자.로그인(모델.로그인ID, 모델.비밀번호, returnUrl, out 에러메시지))
                return Json(new AjaxSuccessModel(returnUrl));

            return Json(new AjaxFailureModel(에러메시지));
        }

        [HttpGet]
        public ActionResult Register()
        {
            return View();
        }

        [Util.AjaxOnly]
        [HttpPost]
        public ActionResult Register(GuestRegisterModel 모델)
        {
            if (모델.로그인ID.Length < Consts.최소로그인ID크기) return Json(Consts.Ajax아이디크기오류);
            if (모델.비밀번호1.Length < Consts.최소비밀번호크기) return Json(Consts.Ajax비밀번호크기오류);
            if (모델.비밀번호1 != 모델.비밀번호2) return Json(Consts.Ajax비밀번호불일치오류);

            using (var db = new DBDataContext()) {
                var n = db.사용자.FirstOrDefault(p => p.로그인ID == 모델.로그인ID);
                if (n != null) return Json(Consts.Ajax아이디중복);

                var 암호화된비밀번호 = CryptographyHelper.CookieEncrypt(모델.비밀번호1);
                var 새사용자 = new DB.사용자 { 로그인ID = 모델.로그인ID, 비밀번호 = 암호화된비밀번호, 이름 = 모델.이름, 이메일 = 모델.이메일 };
                db.사용자.InsertOnSubmit(새사용자);
                db.SubmitChanges();
                return Json(new AjaxSuccessModel(Url.Action("Main", "User"), Consts.저장됨));
            }
        }

        [HttpGet]
        public ActionResult Reset()
        {
            return View();
        }

        [Util.AjaxOnly]
        [HttpPost]
        public ActionResult Reset(GuestResetModel 모델)
        {
            using (var db = new DBDataContext()) {
                var data = db.사용자.FirstOrDefault(p => p.로그인ID == 모델.로그인ID);
                if (data == null) return Json(Consts.Ajax아이디오류);
                if (data.이메일 != 모델.이메일) return Json(Consts.Ajax이메일오류);

                var 비밀번호 = DateTime.Now.ToString("mmss");
                data.비밀번호 = CryptographyHelper.CookieEncrypt(비밀번호);
                db.SubmitChanges();

                SmtpClient objSend = new SmtpClient("203.246.75.190");
                objSend.EnableSsl = false;
                objSend.DeliveryMethod = SmtpDeliveryMethod.Network;
                objSend.Credentials = new NetworkCredential("sanfranc1sc0", "14$dnls^^10");

                MailMessage mail = new MailMessage();
                mail.From = new MailAddress("inpreter@skhu.ac.kr");
                mail.To.Add(data.이메일);
                mail.Subject = "임시 비밀번호 발급";
                mail.Body = "성공회대학교 외래교수 채용 시스템 임시비밀번호: " + 비밀번호;
                mail.SubjectEncoding = System.Text.Encoding.UTF8;
                mail.BodyEncoding = System.Text.Encoding.UTF8;
                mail.IsBodyHtml = true;
                objSend.Send(mail);

                return Json(Consts.Ajax임시비밀번호전송);
            }
        }

    }
}
